质量外联预警 - 虚拟线程“钉住”问题
David Delabassee 于 2024 年 2 月 21 日
The OpenJDK 质量小组 正在推广使用 OpenJDK 构建测试 FOSS 项目,以提高发布版本的整体质量。此预警是发送给相关项目的 定期沟通 的一部分。要详细了解该计划以及如何加入,请查看 此处.
预警:虚拟线程“钉住”问题
虚拟线程已成为 JDK 21 中的永久功能。此功能已受到 Java 生态系统的热烈欢迎,但仍然存在一些痛点。关于在使用同步方法或同步语句时出现的所谓“钉住”问题的文章很多。两种最常见的情况是 (a) 虚拟线程在同步方法中挂起(例如,执行套接字 I/O),以及 (b) 虚拟线程由于对象的关联监视器被另一个线程持有而阻塞进入同步方法。在这两种情况下,底层载体/本地线程都不会“释放”以执行其他工作。性能和可扩展性可能会下降,在某些情况下,可能会发生饥饿和死锁。最近的 虚拟线程下一步 视频更详细地解释了原因,并讨论了一些潜在的解决方案。
行动呼吁
新的 Loom 早期访问构建 最近已发布。这些 Loom EA 构建对对象监视器实现进行了更改,不会在这两种常见情况下钉住。
Loom 团队需要您的帮助来测试这些更新后的对象监视器,使用您知道正在使用虚拟线程的代码以及大量同步的库。目标是评估可靠性和性能。
报告问题或反馈的最简单方法是使用 Loom 邮件列表。对于熟悉 VM 的用户,使用 -XX:LockingMode=1
(当前默认值)和 -XX:LockingMode=2
进行测试将非常有帮助,因为这将测试 HotSpot VM 当前实现的两种锁定模式。